/**
  * Author: Mei
  * Date: 2020-12-01 21:04
  * Description: 
  * 普通的队列是一种先进先出的数据结构，元素在队列尾追加，而从队列头删除。

在优先队列中，元素被赋予优先级。当访问元素时，具有最高优先级的元素最先删除。优先队列具有最高级先出 （first in, largest out）的行为特征。
  *
  *
  */
#include<iostream>
#include <queue>

using namespace std;

int main() {
    //对于基础类型 默认是大顶堆
    priority_queue<int> a;
    //等同于 priority_queue<int, vector<int>, less<int> > a;

    //      这里一定要有空格，不然成了右移运算符↓↓
    priority_queue<int, vector<int>, greater<int>> c;  //这样就是小顶堆
    priority_queue<string> b;

    for (int i = 0; i < 5; i++) {
        a.push(i);
        c.push(i);
    }
    while (!a.empty()) {
        cout << a.top() << ' ';
        a.pop();
    }
    cout << endl;

    while (!c.empty()) {
        cout << c.top() << ' ';
        c.pop();
    }
    cout << endl;

    b.push("abc");
    b.push("abcd");
    b.push("cbd");
    while (!b.empty()) {
        cout << b.top() << ' ';
        b.pop();
    }
    cout << endl;
    return 0;
}